package com.wnx.job.modules.rms.controller;


import com.wnx.job.common.api.Const;
import com.wnx.job.common.api.ResultData;
import com.wnx.job.common.mapstruct.StudentCadreMapper;
import com.wnx.job.modules.jms.model.JmsStudent;
import com.wnx.job.modules.jms.service.JmsStudentService;
import com.wnx.job.modules.pms.service.PmsResumeService;
import com.wnx.job.modules.rms.dto.ResumeParam;
import com.wnx.job.modules.rms.dto.StudentCadreParam;
import com.wnx.job.modules.rms.model.RmsStudentCadre;
import com.wnx.job.modules.rms.service.RmsStudentCadreService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.security.Principal;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author wangnaixing
 * @since 2021-12-17
 */
@Slf4j
@RestController
@RequestMapping("/rms/rmsStudentCadre")
@Api(tags = "StudentCadreController",description = "学生干部经理管理")
public class RmsStudentCadreController {


    @Resource
    private JmsStudentService studentService;
    @Resource
    private PmsResumeService resumeService;
    @Resource
    private RmsStudentCadreService studentCadreService;


    /**
     * 新增学生干部
     * @param studentCadreParam
     * @return
     */
    @PostMapping("/save")
    @ApiOperation("新增学生干部")
    public ResultData<String> save(@RequestBody @Validated StudentCadreParam studentCadreParam, Principal principal){
        log.info("=======系统正在新增学生干部======");
        //获取前端的学生干部对象

        //属性复制
        RmsStudentCadre tbStudentCadre = StudentCadreMapper.INSTANCE.toPojo(studentCadreParam);


        ///设置简历ID进学生干部
        String account = principal.getName();
        JmsStudent student = studentService.findByAccount(account);
        ResumeParam resume = resumeService.findByStudentId(student.getId());
        tbStudentCadre.setResumeId(resume.getId());


        //调用服务层，进行新增学生干部
        studentCadreService.save(tbStudentCadre);


        log.info("=======系统正在新增学生干部成功！======");
        return ResultData.success(Const.ADD_STUDENT_CADRE_SUCCESS);


    }

    /**
     * 删除学生干部
     * @param id
     * @return
     */
    @GetMapping("/delete/{id}")
    @ApiOperation("删除学生干部")
    public ResultData<String> deleteStudentCadre(@PathVariable(name = "id")Long id){
        log.info("========系统正在删除学生干部=====");
        //获取前端的学生干部ID

        //调用服务层，根据ID删除学生干部
        studentCadreService.removeById(id);

        //返回结果集对象
        log.info("========系统删除学生干部成功！=====");
        return ResultData.success(Const.DELETE_STUDENT_CADRE_SUCCESS);
    }


    /**
     * 查询学生干部
     * @param id
     * @return
     */
    @GetMapping("/findById/{id}")
    @ApiOperation("查询学生干部")
    public ResultData<RmsStudentCadre> findById(@PathVariable(name = "id")Long id){
        log.info("========系统正在删除查询学生干部=====");
        //获取前端的学生干部ID

        //调用服务层，根据ID查询学生干部
        RmsStudentCadre studentCadre = studentCadreService.getById(id);
        log.info("========系统查询学生干部成功！=====");
        //返回结果集对象
        return ResultData.success(Const.QUERY_STUDENT_CADRE_SUCCESS,studentCadre);
    }


    /**
     * 修改学生干部
     * @param studentCadreParam
     * @param principal
     * @return
     */
    @PostMapping("/update")
    @ApiOperation("修改学生干部")
    public ResultData<String> update(@RequestBody @Validated StudentCadreParam studentCadreParam, Principal principal){
        log.info("========系统正在修改学生干部！=====");
        //属性复制
        RmsStudentCadre tbStudentCadre = StudentCadreMapper.INSTANCE.toPojo(studentCadreParam);

        ///设置简历ID进学生干部
        String account = principal.getName();
        JmsStudent student = studentService.findByAccount(account);
        ResumeParam resume = resumeService.findByStudentId(student.getId());
        tbStudentCadre.setResumeId(resume.getId());
        //调用服务层，进行修改学生干部
        studentCadreService.updateById(tbStudentCadre);
        log.info("========系统正在修改学生干部成功！！！=====");
        return ResultData.success(Const.UPDATE_STUDENT_CADRE_SUCCESS);


    }



    /**
     * 查询全部学生干部
     * @return
     */
    @GetMapping("/findAll")
    @ApiOperation("查询全部学生干部")
    public ResultData<List<RmsStudentCadre>> findAll(Principal principal){
        log.info("=====系统正在查询全部学生干部=====");
        //通过认证主体，获取学生学号。
        String account = principal.getName();

        //调用服务层，根据学生学号获取学生信息
        JmsStudent student = studentService.findByAccount(account);

        //调用服务层，根据学生ID获取简历
        ResumeParam resume = resumeService.findByStudentId(student.getId());

        //调用服务层进行该根据简历ID，学生干部集合
        List<RmsStudentCadre> StudentCadreList = studentCadreService.findStudentCadreListByResumeId(resume.getId());

        log.info("=====系统正在查询全部学生干部成功！=====");
        //返回结果集对象
        return ResultData.success(Const.QUERY_STUDENT_CADRE_SUCCESS,StudentCadreList);
    }

}

